/**
 * 分组，步长为xx为一组
 *      初始值为len/2,后面依次迭代，越来越小len/2/2
 * 从组与组之间的第一个元素为分界点，开始遍历，i+step确定一组，组与组之间插入排序
 */

 function sellSort(arr){
    if(arr===null||arr.length<2){
        return;
    }


    let len = arr.length;

    for(let grap = ~~(len/2);grap>0;grap=~~(grap/2)){
        for(let i = grap;i<len;i++){
            let index = i;
            // 开始逐组插入排序
            while(index-grap>=0&&arr[index]<arr[index-grap]){
                swap(arr,index,index-grap);
                index -= grap;
            }

        }
    }
    return arr;
 }

 function swap(arr,i,j){
    [arr[i],arr[j]]  = [arr[j],arr[i]];
}

 let arr = [11, 1,5,30,80,98];
 console.log(sellSort(arr));